#ifndef SERVER_SOCKET_H
#define SERVER_SOCKET_H
#include <netdb.h>
#include "common_gestor_envios.h"

class Server_socket{
private:
	int fd;
	struct sockaddr_in addr;
	Gestor_envios* gestor;
public:
	/* Constructor del socket, asignandole un fd y una direccion que contiene informacion
	 * del puerto e IP del server */
	Server_socket(int port);
	/* Constructor por default */
	Server_socket();
	/* Destructor */
	~Server_socket();
	/* Devuelve el fd del socket */
	int get_fd();
	/* Devuelve el address del socket */
	struct sockaddr_in get_addr();
	/* Se asocia al socket con su puerto y se comienza a escuchar conexiones */
	int escuchar_puerto();
	/* Se acepta una conexion asignandole a new el fd, y adrress con informacion
	 * de cliente */
	int aceptar_conexion(Server_socket* nuevo);
	/* Envia un mensaje, controlando que llegue completo */
	int enviar(int aux_fd, std::string buffer, int tam);
	/* Recibe un mensaje, controlando que llegue completo */
	int recibir(int aux_fd, std::string* buffer, int tam);
	/* Cierra la comunicacion en ambas direcciones */
	void cerrar_comunicacion();
	/* Cierra el fd del socket */
	void cerrar();

};

#endif
